Skip to content

feat(funnel): report the onboarded activation milestone - #40

Merged
tranh0anghuan merged 1 commit into
testfrom
feature/funnel-tracking
Aug 25, 2026
Merged

tranh0anghuan merged 1 commit into
testfrom
feature/funnel-tracking

Conversation

@tranh0anghuan

Copy link
Copy Markdown
Collaborator

One call in update_profile, right after drumate_update_profile.

HERE AND NOT IN mark_complete(). mark_complete only VALIDATES that the mandatory steps are stored — it can succeed and then be followed by a failed update_profile, leaving a user who never got onboarded = 1 and meets the wizard again on next login. The profile write is the line that actually ends onboarding, so the milestone belongs after it.

This is the only timestamp the stage will ever have. drumate.profile.$.onboarded is a boolean and nothing else records when the wizard was finished — which is why the funnel needs a row at all rather than a derived query. Accounts that completed before this ships are backfilled with their signup time and flagged approx=1.

Not awaited and never throws, exactly like _pushReferralLive beside it: onboarding completion is the user's flow and an analytics row is a bystander. Idempotent at the database — yp.funnel_milestone is keyed (uid, milestone) — so a user who reruns the wizard keeps the timestamp of their first completion.

One call in update_profile, right after drumate_update_profile.

HERE AND NOT IN mark_complete(). mark_complete only VALIDATES that the
mandatory steps are stored — it can succeed and then be followed by a
failed update_profile, leaving a user who never got `onboarded = 1` and
meets the wizard again on next login. The profile write is the line that
actually ends onboarding, so the milestone belongs after it.

This is the only timestamp the stage will ever have.
drumate.profile.$.onboarded is a boolean and nothing else records when
the wizard was finished — which is why the funnel needs a row at all
rather than a derived query. Accounts that completed before this ships
are backfilled with their signup time and flagged approx=1.

Not awaited and never throws, exactly like _pushReferralLive beside it:
onboarding completion is the user's flow and an analytics row is a
bystander. Idempotent at the database — yp.funnel_milestone is keyed
(uid, milestone) — so a user who reruns the wizard keeps the timestamp
of their first completion.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@tranh0anghuan
tranh0anghuan merged commit a931ca9 into test Aug 25, 2026
8 checks passed
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@github-actions

github-actions Bot commented Aug 25, 2026 •

Copy link
Copy Markdown

Claude encountered an error after 0s —— View job


I'll analyze this and get back to you.

@tranh0anghuan
tranh0anghuan deleted the feature/funnel-tracking branch August 28, 2026 15:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant